package com.rede.didiok.user.modulelist.rank.service;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rede.didiok.common.dto.rank.MemberCommentDto;
import com.rede.didiok.user.modulelist.rank.entity.MemberCommentEntity;

/**
 * 榜单成员评价表
 *
 * @author Rede
 * @email didiok@foxmail.com
 * @date 2023-07-20 22:09:24
 */
public interface MemberCommentService extends IService<MemberCommentEntity> {

    /***************************** didiok-admin:start **************************/
    // region  didiok-admin

    /**
     * 获取评论数目
     *
     * @author
     * @date 2023年10月22日下午3:43:38
     */
    Integer getCommentCount(MemberCommentDto memberCommentDto);

    /**
     * 获取评论列表
     *
     * @param memberCommentDto
     * @return
     */
    IPage<MemberCommentEntity> getPageList(MemberCommentDto memberCommentDto);

    /**
     * 新增评论
     *
     * @param memberCommentDto
     */
    String addComment(MemberCommentDto memberCommentDto);

    /**
     * 编辑评论
     *
     * @param memberCommentDto
     */
    String editComment(MemberCommentDto memberCommentDto);

    /**
     * 删除评论
     *
     * @param memberCommentDto
     */
    String deleteComment(MemberCommentDto memberCommentDto);

    /**
     * 批量删除评论
     *
     * @param commentVOList
     */
    String deleteBatchComment(List<MemberCommentDto> commentVOList);

    /**
     * 审核评论
     *
     * @param memberCommentDto
     * @return
     */
    String auditComment(MemberCommentDto memberCommentDto);

    // endregion
    /***************************** didiok-admin:end **************************/



    /***************************** didiok-web:start **************************/
    // region didiok-web

    /**
     * 获取用户评论列表
     *
     * @param memberCommentDto
     * @return
     */
    IPage<MemberCommentEntity> getUserCommentList(MemberCommentDto memberCommentDto);

    /**
     * 根据id获取榜单成员评论
     * @param uid
     * @return
     */
    MemberCommentEntity getCommentById(String uid);

    /**
     * 评论下架
     * @param uid
     * @return
     */
    Boolean revocationComment(String uid);

    /**
     * 根据用户列表ID  查询各用户评论数
     * @param userUids
     * @return
     */
    List<Map<String, String>> getCommentCountByUserIds(List<String> userUids);
    // endregion
    /***************************** didiok-web:end **************************/

    /**
     * 获取评论数目
     *
     * @author
     * @date 2023年10月22日下午3:43:38
     */
    Integer getCommentCount(String createUserUid, String memberUid, String toUserUid);

    /**
     * 评论转换
     *
     * @param commentList
     * @return
     */
    List<MemberCommentEntity> convertCommentList(Collection<MemberCommentEntity> commentList);

    /**
     * 根据id集合查询评论
     * @param uidList
     * @return
     */
    List<MemberCommentEntity> getCommentPageListByIds(Collection<String> uidList);

    /**
     * 添加评论（当该评论不是一级评论时，需要设置一级评论UID字段）
     * @param comment
     * @return
     */
    MemberCommentEntity addCommentWithFirstCommentUid(MemberCommentDto comment);

    /**
     * 移除该文章下所有评论
     * @param memberUidList
     */
    String batchDeleteCommentByMemberUid(List<String> memberUidList);

    /**
     * 根据条件查询评论列表
     * @param page
     * @param comment
     * @return
     */
    IPage<MemberCommentEntity> queryPageWithRankMember(Page<MemberCommentEntity> page, MemberCommentDto comment);
}

